package mine.code.question.动态规划;

import org.junit.Test;

import java.util.Arrays;
import java.util.Comparator;

/**
 * 给定一个区间的集合，找到需要移除区间的最小数量，使剩余区间互不重叠。
 * <p>
 * 注意:
 * <p>
 * 可以认为区间的终点总是大于它的起点。
 * 区间 [1,2] 和 [2,3] 的边界相互“接触”，但没有相互重叠。
 * 示例 1:
 * <p>
 * 输入: [ [1,2], [2,3], [3,4], [1,3] ]
 * <p>
 * 输出: 1
 * <p>
 * 解释: 移除 [1,3] 后，剩下的区间没有重叠。
 *
 * @author caijinnan
 */
public class 无重叠区间 {

    @Test
    public void run() {
        int[][] intervals = {{1, 2}, {2, 3}, {3, 4}, {1, 3}};
        System.out.println(eraseOverlapIntervals(intervals));
    }

    public int eraseOverlapIntervals(int[][] intervals) {
        Arrays.sort(intervals, Comparator.comparingInt(o -> o[0]));
        int[] dp = new int[intervals.length];
        dp[0] = 1;
        int max = dp[0];
        for (int i = 1; i < intervals.length; i++) {
            int tempMax = 0;
            for (int j = 0; j <= i; j++) {
                if (intervals[i][0] >= intervals[j][1]) {
                    tempMax = Math.max(dp[j] + 1, tempMax);
                }
            }
            max = Math.max(max, tempMax);
            dp[i] = max;
        }
        return intervals.length - dp[intervals.length - 1];
    }
}
